const path = require('path');
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
const webpack = require('webpack');

module.exports = {
  pluginOptions: {
    'style-resources-loader': {
      preProcessor: 'less',
      patterns: [
        // 全局less变量存储路径
        path.resolve(__dirname, './src/assets/css/init.less'),
      ],
    },
    electronBuilder: {
      nodeIntegration: true,
      chainWebpackMainProcess: (config) => {
        config.output.filename('background.js');
      },
      builderOptions: {
        productName: 'Tools', //生成exe的名字(允许为汉字)
        appId: 'com.my_Tools.www', //包名
        copyright: 'my_Tools', //版权信息
        // directories: {
        //   // 输出文件夹(不修改则默认在dist_electron下)
        //   "output": "dist",
        // },
        afterPack: './src/remove.js',
        extraResources: [
          { from: './src/config/config.json', to: 'src/config/config.json' },
          { from: './src/config/pwd.json', to: 'src/config/pwd.json' },
          { from: './src/config/web.json', to: 'src/config/web.json' },
          { from: './src/assets/img', to: 'src/assets/img' },
          { from: './src/assets/font', to: 'src/assets/font' },
        ],
        compression: 'maximum', // "store" | "normal"| "maximum" 打包压缩情况(store 相对较快)
        extraFiles: [
          {
            from: 'locales',
            to: 'locales',
            filter: [
              '**/zh-CN.pak', // 保留简体中文
            ],
          },
        ], // 把指定的资源复制到程序根目录，即把server文件夹的内容复制到程序根目录
        // files: ["src/config/config.json"], //不需要打包进去的文件
        asar: true,
        // asarUnpack: [
        //     "./src/assets/font/**",   // 不需要打包到asar中的文件，也就是有改动的代码
        // ],
        nsis: {
          oneClick: false, // 是否一键安装
          allowElevation: true, // 允许请求提升。若为false，则用户必须使用提升的权限重新启动安装程序。
          allowToChangeInstallationDirectory: true, //是否允许修改安装目录
          installerIcon: './src/assets/img/favicon.ico', // 安装时图标(所有路径均相对根目录)
          uninstallerIcon: './src/assets/img/favicon.ico', //卸载时图标
          installerHeaderIcon: './src/assets/img/favicon.ico', // 安装时头部图标
          createDesktopShortcut: true, // 是否创建桌面图标
          createStartMenuShortcut: true, // 是否创建开始菜单图标
          shortcutName: '工具集', // 快捷方式名称
          runAfterFinish: false, //是否安装完成后运行
        },
        // publish: [
        //   {
        //     provider: "generic",
        //     url: "http://127.0.0.1:3000/exe", //版本服务器地址
        //   },
        // ],
        win: {
          icon: 'src/assets/img/favicon.ico', //图标路径
          target: [
            {
              target: 'nsis', //利用nsis制作安装程序
              // target: "portable", //单文件免安装版
              arch: [
                'x64', //64位
                // "ia32" //32位
              ],
            },
          ],
          requestedExecutionLevel: 'highestAvailable', //获取管理员权限
        },
      },
    },
  },
  chainWebpack(config) {
    config.resolve.alias.set('@', path.resolve('src'));
    config.plugin('monaco').use(
      new MonacoWebpackPlugin({
        languages: ['json'],
        features: ['coreCommands', 'find', 'bracketMatching', 'clipboard', 'hover', 'links', 'suggest'],
      })
    );
    // 添加 DefinePlugin 配置
    config.plugin('define').use(webpack.DefinePlugin, [
      {
        __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: JSON.stringify(false),
      },
    ]);
    // 让 Vue 忽略 <webview> 标签的解析
    config.module
      .rule('vue')
      .use('vue-loader')
      .tap((options) => {
        options.compilerOptions = {
          ...(options.compilerOptions || {}),
          isCustomElement: (tag) => tag === 'webview',
        };
        return options;
      });
  },
  devServer: {
    host: '0.0.0.0',
    port: 7778, // 将端口号修改为你需要的值，例如 8081
  },
};
